#include <stdio.h>      // 标准输入输出
#include "ohos_init.h"  // 用于初始化服务(services)和功能(features)
#include "cmsis_os2.h"  // CMSIS-RTOS API V2

#include "iot_gpio.h"   // OpenHarmony HAL API：IoT硬件设备操作接口-GPIO
#include "hi_io.h"      // 海思Pegasus SDK API：IoT硬件设备操作接口-IO


// 主线程函数
static void GpioTask(void *arg)
{
    (void)arg;

    // 初始化GPIO模块
    IoTGpioInit(HI_IO_NAME_GPIO_13);
    IoTGpioInit(HI_IO_NAME_GPIO_14);
    IoTGpioInit(HI_IO_NAME_GPIO_7);
    IoTGpioInit(HI_IO_NAME_GPIO_8);
    IoTGpioInit(HI_IO_NAME_GPIO_6);
    IoTGpioInit(HI_IO_NAME_GPIO_5);
    IoTGpioInit(HI_IO_NAME_GPIO_12);
    IoTGpioInit(HI_IO_NAME_GPIO_11);

    // 设置GPIO为GPIO功能。
    hi_io_set_func(HI_IO_NAME_GPIO_13, HI_IO_FUNC_GPIO_13_GPIO);
    hi_io_set_func(HI_IO_NAME_GPIO_14, HI_IO_FUNC_GPIO_14_GPIO);
    hi_io_set_func(HI_IO_NAME_GPIO_7, HI_IO_FUNC_GPIO_7_GPIO);
    hi_io_set_func(HI_IO_NAME_GPIO_8, HI_IO_FUNC_GPIO_8_GPIO);
    hi_io_set_func(HI_IO_NAME_GPIO_6, HI_IO_FUNC_GPIO_6_GPIO);
    hi_io_set_func(HI_IO_NAME_GPIO_5, HI_IO_FUNC_GPIO_5_GPIO);
    hi_io_set_func(HI_IO_NAME_GPIO_12, HI_IO_FUNC_GPIO_12_GPIO);
    hi_io_set_func(HI_IO_NAME_GPIO_11, HI_IO_FUNC_GPIO_11_GPIO);



    // 设置GPIO9为输出模式（引脚方向为输出）。
    IoTGpioSetDir(HI_IO_NAME_GPIO_13, IOT_GPIO_DIR_IN);
    IoTGpioSetDir(HI_IO_NAME_GPIO_14, IOT_GPIO_DIR_IN);
    IoTGpioSetDir(HI_IO_NAME_GPIO_7, IOT_GPIO_DIR_IN);
    IoTGpioSetDir(HI_IO_NAME_GPIO_8, IOT_GPIO_DIR_IN);
    IoTGpioSetDir(HI_IO_NAME_GPIO_6, IOT_GPIO_DIR_IN);
    IoTGpioSetDir(HI_IO_NAME_GPIO_5, IOT_GPIO_DIR_IN);
    IoTGpioSetDir(HI_IO_NAME_GPIO_12, IOT_GPIO_DIR_IN);
    IoTGpioSetDir(HI_IO_NAME_GPIO_11, IOT_GPIO_DIR_IN);


    char *key = "123456";
    char keys[4][4] = 
    {
    {'1', '2', '3', 'A'},
    {'4', '5', '6', 'B'},
    {'7', '8', '9', 'C'},
    {'*', '0', '#', 'D'}
    };
}


while (1)
{
        IotGpioValue value13 = IOT_GPIO_VALUE0;
        IotGpioValue value14 = IOT_GPIO_VALUE0;
        IotGpioValue value7 = IOT_GPIO_VALUE0;
        IotGpioValue value8 = IOT_GPIO_VALUE0;


        IotGpioValue value6 = IOT_GPIO_VALUE0;
        IotGpioValue value5 = IOT_GPIO_VALUE0;
        IotGpioValue value12 = IOT_GPIO_VALUE0;
        IotGpioValue value11 = IOT_GPIO_VALUE0;

        //读取GPIO信号的值1或0
        IoTGpioGetInputVal(HI_IO_NAME_GPIO_13, &value13);
        IoTGpioGetInputVal(HI_IO_NAME_GPIO_14, &value14);
        IoTGpioGetInputVal(HI_IO_NAME_GPIO_7, &value7);
        IoTGpioGetInputVal(HI_IO_NAME_GPIO_8, &value8);


        IoTGpioGetInputVal(HI_IO_NAME_GPIO_6, &value6);
        IoTGpioGetInputVal(HI_IO_NAME_GPIO_5, &value5);
        IoTGpioGetInputVal(HI_IO_NAME_GPIO_12, &value12);
        IoTGpioGetInputVal(HI_IO_NAME_GPIO_11, &value11);


        osDelay(10);
}

// 入口函数
static void Entry(void)
{
    // 定义线程属性
    osThreadAttr_t attr = {0};
    // 线程属性设置：设置线程名称
    attr.name = "Task";
    // 线程属性设置：设置线程栈大小
    attr.stack_size = 4096;
    // 线程属性设置：设置线程优先级
    attr.priority = osPriorityNormal;

    // 创建线程
    if (osThreadNew(GpioTask, NULL, &attr) == NULL)
    {
        printf("[Task] Create GpioTask failed!\n");
    }
}

// 运行入口函数
// ohos_init.h 中定义的宏，让函数在系统启动时执行
SYS_RUN(Entry);
